package com.example.demo20250926.interceptor;

import com.example.demo20250926.demos.web.User;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author sky
 * @date 2025年10月31日 10:44
 * @description 登录验证拦截器
 * @since 1.0.0
 */
public class LoginValidationInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //在调用 Controller 方法之前，执行此方法；
        System.out.println("登录验证拦截器preHandle...");
        User u = (User) request.getSession().getAttribute("user");
        if (u == null) {
            // 若未登录，重定向到登录页面
            response.sendRedirect("/login");
            return false;
        }
        System.out.println("登录验证通过...");
        // 若已登录，继续往下执行
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("登录验证拦截器postHandle...");
        // 请求处理完成后调用此方法, 一般用来向页面传递数据
        //在调用 Controller 方法之后，页面渲染之前，执行此方法，通常您可以在此方法中将渲染的视图名称更改为其他视图名称
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("登录验证拦截器afterCompletion...");
        // 页面渲染完成后调用此方法, 一般用来清除某些资源等
    }
}
